package DAO;

import BD.BancaProfessorBD;
import BD.BancaBD;
import ConexaoBackupBD.ConexaoBD;
import ConexaoBackupBD.MetodosVerificacaoBD;
import java.sql.*;
import javax.swing.JOptionPane;

public class BancaDAO {
    
    //Conexao com o banco de dados
    ConexaoBD conBD = new ConexaoBD();    
    Statement BDBanPro;
    ResultSet rs;
      
    public boolean inserirBanca(BancaBD ban){
        try{
            Connection con = conBD.conectar();
            PreparedStatement pr;
            if(ban.getData_homolocacao() != null){
                pr = con.prepareStatement("INSERT INTO banca VALUES (?, ?, ?, ?);", Statement.RETURN_GENERATED_KEYS);
                pr.setInt(1, 0);
                pr.setBoolean(2, ban.getHomologada());
                pr.setDate(3, new java.sql.Date(ban.getData_homolocacao().getTime()));
                pr.setString(4, ban.getNivel());
                
                if(pr.executeUpdate() >0){                    
                    rs = pr.getGeneratedKeys();
                    if (rs.next()) {
                        BancaProfessorBD.setCod_banca_ultimo(rs.getInt(1));
                    }               
                    return true;
                }else{
                    return false;    
                }
            }
            else{
                pr = con.prepareStatement("INSERT INTO banca (cod_banca, "
                        + " homologada_banca, nivel_banca) VALUES"
                    + " (?, ?, ?);" ,Statement.RETURN_GENERATED_KEYS);
                pr.setInt(1, 0);
                pr.setBoolean(2, ban.getHomologada());
                pr.setString(3, ban.getNivel());
                
                if(pr.executeUpdate() >0){
                    rs = pr.getGeneratedKeys();
                    if (rs.next()) {
                        BancaProfessorBD.setCod_banca_ultimo(rs.getInt(1));
                    }
                    
                    return true;
                }else{
                    return false;    
                }
            }
        
        }catch(SQLException e){
             JOptionPane.showMessageDialog(null,e.getMessage(),
                    "Erro no banco", JOptionPane.ERROR_MESSAGE);
             return false;
        }   
    }
    
    public BancaBD recuperarBanca(int codBanca) {
        MetodosVerificacaoBD metBD = new MetodosVerificacaoBD();
        BancaBD ban = new BancaBD();
        
        try { 
            Connection con = conBD.conectar();
            BDBanPro = con.createStatement();
            rs = BDBanPro.executeQuery("SELECT * from banca "
                    + " where cod_banca = "+codBanca+" ");

            if (rs != null) { 
                while (rs.next()) { 
                    ban.setCod_banca(rs.getInt("cod_banca"));
                    ban.setHomologada(rs.getBoolean("homologada_banca"));
                    ban.setData_homolocacao(rs.getDate("data_homologacao_banca"));    
                    ban.setNivel(rs.getString("nivel_banca"));
                }
                con.close();
                return ban; 
          }else {
                con.close();
                return null; 
          } 
        } catch (SQLException e) { 
            return null; 
        } 
    }
    
    /** Método para excluir uma banca a partir do código. */
    public boolean excluirBanca(int codBanca){
        String sql = "delete from banca where cod_banca = ?";   

        try {
            Connection con = conBD.conectar();
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setInt(1, codBanca);
            if (ps.executeUpdate() > 0) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException e) {
             JOptionPane.showMessageDialog(null, e.getMessage(), 
                     "Erro no Banco", JOptionPane.ERROR_MESSAGE);
             return false;
        }
    }
    
    /**Método para alterar uma banca. */
    public boolean alterarBanca(BancaBD ban){       
        try {
            // obtem conexão
            Connection con = conBD.conectar();            

            if(ban.getData_homolocacao() != null){
                String sql = "UPDATE banca SET "
                + " homologada_banca = ?, data_homologacao_banca = ?, nivel_banca = ?  "
                + " WHERE cod_banca = ?";
                PreparedStatement ps = con.prepareStatement(sql);
                
                ps.setBoolean(1, ban.getHomologada());
                ps.setDate(2, new java.sql.Date(ban.getData_homolocacao().getTime()));
                ps.setString(3, ban.getNivel());
                ps.setString(4, String.valueOf(ban.getCod_banca()));

                if (ps.executeUpdate() > 0) {
                    con.close();
                    return true;
                } else {
                    con.close();
                    return false;
                }    
            }else{
                String sql = "UPDATE banca SET "
                + " homologada_banca = ?, data_homologacao_banca = ?, nivel_banca = ? ";
                sql += " WHERE cod_banca = ?";
                PreparedStatement ps = con.prepareStatement(sql);
                
                ps.setBoolean(1, ban.getHomologada());
                ps.setDate(2, null);
                ps.setString(3, ban.getNivel());
                ps.setString(4, String.valueOf(ban.getCod_banca()));

                if (ps.executeUpdate() > 0) {
                    con.close();
                    return true;
                } else {
                    con.close();
                    return false;
                }    
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,e.getMessage(),
                    "Erro no banco", JOptionPane.ERROR_MESSAGE);
            return false;
        }    
    }
}
